<template>
  <div class="comments">
    <myheader title="精彩评论">
      <span
        slot="left"
        class="iconfont iconjiantou2"
        @click="$router.back()"
      ></span>
    </myheader>
    <div class="lists">
      <div class="item" v-for="(v, i) in commentList" :key="i">
        <div class="head">
          <img :src="v.user.head_img" alt />
          <div>
            <p>{{ v.user.nickname }}</p>
            <span>{{ $moment(v.create_date).fromNow() }}</span>
          </div>
          <!-- 回复评论 ：接口api传参：parent_id + content
          parent_id 数据由父组件传递给子组件：父组件使用子组件的地方进行传值
          点击“回复”事件：需将事件传递给子组件，进行文本域弹框
          -->
          <span @click="sendCommend(v)">回复</span>
        </div>
        <!-- 不是每个评论都会有parent,如果没有，则不生成评论块结构 -->
        <!-- 监听 commentItem 发来的回复事件以及收到传递的数据,并复用之前的 函数 进行数据传递给 commentFooter-->
        <commentItem
          :parent="v.parent"
          v-if="v.parent"
          @replyComment="sendCommend"
        >
        </commentItem>
        <div class="text">{{ v.content }}</div>
      </div>
    </div>
    <!-- 发表评论底部结构 -->
    <commentFooter
      :post="articleDetail"
      @refreshPage="refreshPage"
      :obj="commentItem"
      @resetobj="commentItem = null"
    >
    </commentFooter>
  </div>
</template>

<script>
import myheader from "@/components/myheader.vue";
import commentItem from "@/components/commentItem.vue";
import commentFooter from "@/components/commentFooter.vue";
import { getArticleCommentList, getArticleDetail } from "@/api/article.js";
import axios from "@/utils/myaxios.js";
export default {
  components: {
    myheader,
    commentItem,
    commentFooter,
  },
  data() {
    return {
      commentList: [],
      articleDetail: {},
      commentItem: {}, //父组件单击回复的时候，需要传递给子组件的评论数据对象
    };
  },
  methods: {
    async init() {
      let res = await getArticleCommentList(this.$route.params.id);
      this.commentList = res.data.data.map((v) => {
        if (v.user.head_img) {
          v.user.head_img = axios.defaults.baseURL + v.user.head_img;
        } else {
          v.user.head_img =
            axios.defaults.baseURL + "/uploads/image/default.png";
        }
        return v;
      });
      console.log(this.commentList);
      //   根据文章id获取文章的详情---获取文章评论总数---数据父传子

      let result = await getArticleDetail(this.$route.params.id);
      this.articleDetail = result.data.data;
      // console.log(this.articleDetail);
    },
    // 列表数据的刷新
    refreshPage() {
      // 监听子组件发送评论事件，重新加载页面
      this.init();
      // 让用户看到评论，将页面滚动到最顶部
      window.scrollTo(0, 0);
    },
    // 回复评论中触发事件---存储数据(data中定义成员进行储存)----传值给子组件
    sendCommend(v) {
      // console.log(v);
      this.commentItem = v;
      console.log(this.commentItem);
    },
  },
  async mounted() {
    this.init();
  },
};
</script>

<style lang='less' scoped>
.lists {
  border-top: 5px solid #ddd;
  padding: 0 15px 50px;
  .item {
    padding: 10px 0;
    border-bottom: 1px solid #ccc;
    .head {
      display: flex;
      justify-content: space-between;
      align-items: center;
      > img {
        width: 50/360 * 100vw;
        height: 50/360 * 100vw;
        display: block;
        border-radius: 50%;
      }
      > div {
        flex: 1;
        display: flex;
        flex-direction: column;
        margin-left: 10px;
        > span {
          font-size: 12px;
          color: #999;
          line-height: 25px;
        }
      }
      > span {
        color: #999;
        font-size: 13px;
      }
    }
    .text {
      font-size: 14px;
      color: #333;
      padding: 20px 0 10px 0;
    }
  }
}
</style>